package com.soft.mainsite.common.db;

import com.soft.mainsite.common.db.impl.M;

/**
 * Description:数据库建表
 *
 * @author Jin
 * @create 2017-04-18
 */
public interface DbTableAssistant<T> {

    /**
     * 创建
     *
     * @return
     */
    T create();

    /**
     * 编辑
     *
     * @return
     */
    T edit();

    /**
     * 删除
     *
     * @return
     */
    T delete();

    /**
     * 创建sql
     *
     * @return
     */
    String builderSql();

    /**
     * 表名
     *
     * @param tableName
     * @return
     */
    T tableName(String tableName);

    /**
     * 初始化列
     *
     * @param columnName
     * @param columnType
     * @param length
     * @param autoIncrement
     * @param defaultValue
     * @param isNotNull
     * @param isPrimaryKey
     * @return
     */
    T initColumn(String columnName, M columnType, Integer length, boolean autoIncrement, String defaultValue, boolean isNotNull, boolean isPrimaryKey);

    /**
     * 添加列
     *
     * @param columnName
     * @param columnType
     * @param length
     * @param autoIncrement
     * @param defaultValue
     * @param isNotNull
     * @param isPrimaryKey
     * @return
     */
    T addColumn(String columnName, M columnType, Integer length, boolean autoIncrement, String defaultValue, boolean isNotNull, boolean isPrimaryKey);

    /**
     * 改变列
     *
     * @param columnName
     * @param newColumnNane
     * @param columnType
     * @param length
     * @param autoIncrement
     * @param defaultValue
     * @param isNotNull
     * @return
     */
    T changeColumn(String columnName, String newColumnNane, M columnType, Integer length, boolean autoIncrement, String defaultValue, boolean isNotNull);

    /**
     * 删除列
     *
     * @param columnName
     * @param isPrimaryKey
     * @return
     */
    T dropColumn(String columnName, boolean isPrimaryKey);

    /**
     * 添加索引
     *
     * @param cloumnName
     * @param length
     * @return
     */
    T addIndex(String cloumnName, Integer length);

    /**
     * Engine
     *
     * @param engineName
     * @return
     */
    T engine(String engineName);

    /**
     * 字符
     *
     * @param charset
     * @return
     */
    T charSet(String charset);

}
